from django.db import models

# Create App models here.


class UserModels(models.Model):
    # uid 会称为主键，原来的id不会创建
    uid = models.AutoField(auto_created=True, primary_key=True)
    # CharField 字符串类型，unique唯一，db_index 设置为索引
    name = models.CharField(max_length=32, unique=True, db_index=True)
    # IntegerField 整数类型，default默认值
    age = models.IntegerField(default=18)

    # ===========  这上面的三个列创建后我就生成了迁移文件并执行了迁移，在数据库中创建了表。  ========== #

    # BooleanField 布尔类型
    gender = models.BooleanField(default=True)
    # TextField 长文本类型 null=True表示可以为空，blank=True表示在Admin界面可以为空
    info = models.TextField(null=True, blank=True)
    # FloatField 小数
    salary = models.FloatField(default=10000.12)
    # DecimalField 十进制小数 max_digits=4 最大长度 decimal_places=2小数点后两位
    money = models.DecimalField(max_digits=4, decimal_places=2, default=10.12)  # 要加上默认值才能迁移成功

    # ===========  现在我对models模型类进行了扩充，此时进行迁移会报错，原因是新增的列必须都有一个默认值否则无法实现迁移  ========== #
    """
    It is impossible to add a non-nullable field 'money' to usermodels without specifying a default. This is because the database needs something to populate existing rows.
    Please select a fix:
    1) Provide a one-off default now (will be set on all existing rows with a null value for this column) 
    2) Quit and manually define a default value in models.py.
    
    无法在用户模型中添加非空字段“money”而没有指定默认值。这是因为数据库需要一些东西来填充现有的行。
    请选择一种修复方法：
    1）现在提供一次性默认值（将为所有现有行中该列的null值设置默认值）
    2）退出并手动在models.py中定义默认值。
    """

    # 日期 默认值可以是字符串
    birthday = models.DateField(default='2000-01-01')
    birthday2 = models.DateTimeField(auto_now=True)  # 每次修改后会改成当时修改的时间
    birthday3 = models.DateTimeField(auto_now_add=True)  # 第一次添加数据时候的时间，以后不会修改

    # ===========  如果新增的列是日期，那么在迁移的时候会提示你插入默认值，如果选择1，然后直接回车则用当前时间作为默认值。  ========== #
    # 如果你想回滚到之前版本的类，那么要做两件事情，
    #   第一件事是删除migrations文件夹中的对应迁移文件
    #   第二件事是将数据库中的django_migrations表里面对应的那一条迁移数据删掉

    # 文件和图片
    icon = models.FileField(null=True, blank=True, upload_to='static/uploads')
    icon2 = models.ImageField(null=True, blank=True, upload_to='static/uploads')

    # choices是一个元组里面套元组，存放的是数字，显示的是字符
    choices = (
        (1, '青铜'),
        (2, '大师'),
        (3, '王者')
    )
    # name是你指定在数据库中列的名字
    user_type = models.IntegerField(choices=choices, default=1, name='utype', verbose_name='用户类型')

    class Meta:
        db_table = 't_user'
